I have rebuilt the gantry to include the IR probe and managed to get an ethernet cable into the workshop, so now testing via the DWS.
I expect that there is still finetuning to do with speeds, acceleration etc, but the whole rig is running smoothly, so back to the surface probing.
For testing purposes, I wrote a macro to probe every 2degrees around the circumference ie 180 plot points.

G0 X150 Y0; start of collar - need sensor offset
G91 ; relative movement
; the next section was expanded 180 times as no variables and haven't explored testing against the object yet
G30 S-1 ; single probe
M409 K"move.axes[].machinePosition
G1 Z0.5 F100 ; raise Z by 0.5mm
G1 Y2 ; move by 1 degree
;
G90 ; absolute positioning
This probed OK - it took quite a while though - but I was getting readings back in jason format.

So why am I not just using bed mapping and fade to build up the ring collar? Normal bed mapping assumes that the surface to be found is zero whilst mine is as some arbitrary circumference. All I know is that it will be above 20mm and below 48mm (to allow a 2mm accurate surface to be built).

When variables etc are in place for macros, I wonder if I could do all the arithmetic there assuming I could read the mapping points.
Could there be a key in the object model for the surface map?

At the moment I intend to export all the information to a laptop running the via the web services.
I know in Marlin that a displayed position may be given back before the head had reached that point as gCodes are queued and that the position request could be processed before the movement was finished. If I run the probing macro as above, can I be sure that the figures back from the M409 will be the probe position?
If I send direct codes rr_model?key=move.axes[].machinePosition is this outside of the queue?
I think that I can do all the calculations in javascript on a dedicated web page and make an easy controller for the printer, leaving the RepRap software as standard.
Clive